package modelo;

import java.text.ParseException;
import java.util.Date;
import java.util.List;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

import org.hibernate.criterion.Restrictions;

import dao.imp.Base_DatosDAO;

public class Compra {
	private String rif_empresa;
	private int numero;
	private Date fecha;
	private Tipo_Compra tipo_compra;
	private char estatus;
	
	public Compra() {
		super();
	}

	public Compra(String rif_empresa, int numero, Date fecha, Tipo_Compra tipo_compra,
			char estatus) {
		super();
		this.rif_empresa = rif_empresa;
		this.numero = numero;
		this.fecha = fecha;
		this.tipo_compra = tipo_compra;
		this.estatus = estatus;
	}

	public String getRif_empresa() {
		return rif_empresa;
	}

	public void setRif_empresa(String rif_empresa) {
		this.rif_empresa = rif_empresa;
	}

	public int getNumero() {
		return numero;
	}

	public void setNumero(int numero) {
		this.numero = numero;
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public Tipo_Compra getTipo_compra() {
		return tipo_compra;
	}

	public void setTipo_compra(Tipo_Compra tipo_compra) {
		this.tipo_compra = tipo_compra;
	}

	public char getEstatus() {
		return estatus;
	}

	public void setEstatus(char estatus) {
		this.estatus = estatus;
	}
	
	public List<Detalle_Cliente_Compra> getClientes_compra(){
		Base_DatosDAO conexion = new Base_DatosDAO();
		List<Detalle_Cliente_Compra> detalle_clientes_compra = conexion.findBySQLQuery("select * from detalle_cliente_compra where compra='"+Integer.toString(this.numero)+"'", "detalle", Detalle_Cliente_Compra.class);
		return detalle_clientes_compra;
	}
	
	public List<Detalle_Compra> getFresas_compra(){
		Base_DatosDAO conexion = new Base_DatosDAO();
		List<Detalle_Compra> detalle_compra = conexion.findBySQLQuery("select * from detalle_compra where compra='"+Integer.toString(this.numero)+"'", "detalle", Detalle_Compra.class);
		return detalle_compra;
	}
	
	public double MontoTotalCompra() throws ParseException{
		List<Detalle_Compra> fresas = this.getFresas_compra();
		double total = 0;
		for (int i=0;i<fresas.size();i++){
			total+=fresas.get(i).MontoTotalDetalle();
		}
		return total;
	}
	
	public double MontoPagar_Cliente() throws ParseException{
		if (this.tipo_compra.getCodigo().equals("C-MED")){
			return MontoTotalCompra()/(getClientes_compra().size()+1);
		}
		else{
			return MontoTotalCompra();
		}
	}
	
	public String getTipo(){
		return getTipo_compra().getDescripcion();
	}
	
	public int getClientes(){
		return getClientes_compra().size();
	}
	
	public JRDataSource getDetalles_ds(){
		//JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, map, new JRBeanCollectionDataSource(compras));
		return new JRBeanCollectionDataSource(getFresas_compra());
	}
	
	public double getMonto_compra() throws ParseException{
		return MontoPagar_Cliente();
	}
}
